//################################################################################
// MIT License
// Copyright (c) 2024 ZhangYihua
//
// Change Logs:
// Date           Author       Notes
// 2023-11-03     ZhangYihua   first version
//
// Description  : 
//################################################################################

module u_sat#(
parameter           IW                      = 9,    // IW>=OW
parameter           OW                      = 8
) ( 
input               [IW-1:0]                id,
output              [OW-1:0]                od
);

//################################################################################
// define local varialbe and localparam
//################################################################################


//################################################################################
// main
//################################################################################

generate if (IW>OW) begin:G_BIG
    wire                                        over;

    assign over = |id[IW-1:OW];
    assign od = (over==1'b1) ? {OW{1'b1}} : id[OW-1:0];
end else if (IW==OW) begin:G_EQ
    assign od = id;
end else begin:G_SMALL
    assign od = {{OW-IW{1'b0}}, id};
end endgenerate

//################################################################################
// ASSERTION
//################################################################################

`ifdef CBB_ASSERT_ON
// synopsys translate_off


// synopsys translate_on
`endif

endmodule
